/**
 * Copyright (C) 2013-2014 the original author or authors.
 */
package com.foreveross.bsl.mam.app.application;

import java.util.List;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.foreveross.bsl.mam.app.application.vo.AppVersionVo;

/**
 * 
 * @author tanzhixiong
 * @2013-6-21 @上午11:26:02
 */
@Path(value = "/app/versions")
public interface AppVersionApplication {

	@POST
	@Path("/add")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public AppVersionVo saveEntity(AppVersionVo entity);

	@PUT
	@Path("/update/{id}")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public AppVersionVo updateEntity(@PathParam("id") String id,
			AppVersionVo entity);

	@DELETE
	@Path("/delete/{id}")
	public void deleteEntity(@PathParam("id") String id);

	@GET
	@Path("/get/{id}")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public AppVersionVo getEntity(@PathParam("id") String id);

	/**
	 * 查询平台历史版本
	 * 
	 * @param platform
	 * @param appId
	 * @return
	 */
	@GET
	@Path("/{platform}/list/{appId}")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List<AppVersionVo> findByPlatform(
			@PathParam("platform") String platform,
			@PathParam("appId") String appId);

	/**
	 * 查询平台下载次数
	 * 
	 * @param platform
	 * @param appId
	 * @return
	 */
	@GET
	@Path("/{platform}/count/{appId}")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public int findBycount(@PathParam("platform") String platform,
			@PathParam("appId") String appId);

	
	/** 获取已上架版本的平台信息
	 * @param appId
	 * @param status
	 * @return
	 */
	@GET
	@Path("/status/{status}/{appId}")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List<AppVersionVo> getAppStatus(@PathParam("appId") String appId,
			@PathParam("status") int status);
	
	/** 获取已上架版本的平台信息 add by heyw
	 * @param appId
	 * @param status
	 * @param platform
	 * @return
	 */
	@GET
	@Path("/")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List<AppVersionVo> getAppStatus_platform(
			@QueryParam("appId") String appId, 
			@QueryParam("status") int status, 
			@QueryParam("platform")String platform);

	/**
	 * 根据应用id和版本号获取版本
	 * 
	 * @param appid
	 * @param version
	 * @return
	 */
	@GET
	@Path("/findListByVersion")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List<AppVersionVo> findListByVersion(
			@QueryParam("appId") String appId,
			@QueryParam("version") String version);

	/**
	 * 根据应用平台、标识和版本号获取版本对象
	 * 
	 * @param appid
	 * @param version
	 * @return
	 */
	@GET
	@Path("/findByVersion")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public AppVersionVo findByVersion(@QueryParam("platfrom") String platfrom,
			@QueryParam("appId") String appId,
			@QueryParam("version") String version);

	/**
	 * 根据打包序列号获取版本信息
	 * 
	 * @param appid
	 * @param version
	 * @return
	 */
	@GET
	@Path("/findSeq")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public AppVersionVo findBySeq(@QueryParam("seq") String seq);

	@GET
	@Path("/findAll")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List<AppVersionVo> findAll();

	@POST
	@Path("/pages")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public Page<AppVersionVo> findByPageable(Pageable pageable);

	/**
	 * 根据应用标识删除版本
	 * 
	 * @param appId
	 */
	@DELETE
	@Path("/deleteByApp/{appId}")
	public void deleteByApp(@PathParam("appId") String appId);

	/**
	 * 添加快照
	 * 
	 * @param appId
	 * @param version
	 * @param snapshotId
	 * @return
	 */
	@POST
	@Path("/snapshot")
	public void addAppSnapshot(@FormParam("appId") String appVId,
			@FormParam("snapshotId") String snapshotId);

	/**
	 * 删除快照
	 * 
	 * @param appId
	 * @param version
	 * @param snapshotId
	 * 
	 * @return boolean
	 */
	@DELETE
	@Path("/snapshot/{appVId}/{snapshotId}")
	public void deleteSnapshot(@PathParam("appVId") String appVId,
			@PathParam("snapshotId") String snapshotId);

	/**
	 * 
	 * 验证构建号是否合法
	 * 
	 * @param appId
	 * @param build
	 * 
	 * @return int[] [0]: 0 不合法，1合法 [1]: 旧构建号
	 */
	@GET
	@Path("/checkBuild/{platfrom}/{build}/{appId}")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public int[] checkBuild(@PathParam("platfrom") String platfrom,
			@PathParam("build") String build, @PathParam("appId") String appId);

	/**
	 * 根据应用ID，platform，version获取应用对应的版本
	 * 
	 * @param appId
	 * @param appVersion
	 * @param platform
	 * @return
	 */
	@GET
	@Path("/getAppVersion/{appId}/{appVersion}/{platform}")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List<AppVersionVo> getAppVersionByPlatformAndVersion(@PathParam("appId")String appId,
			@PathParam("appVersion")String appVersion, @PathParam("platform")String platform);
}
